const log4 = require('log4js');
const path = require('path');
const filePath = path.resolve(__dirname, './log/');
log4.configure({
  'appenders': {
    xcLogConsole: {type: 'console'},
    'error': {
      'type': 'logLevelFilter',
      'level': 'error',
      'appender': 'errorFile'
    },
    'info': {
      'type': 'logLevelFilter',
      'level': 'info',
      'appender': 'infoFile'
    },
    'warn': {
      'type': 'logLevelFilter',
      'level': 'warn',
      'appender': 'warnFile'
    },
    'debug': {
      'type': 'logLevelFilter',
      'level': 'debug',
      'appender': 'debugFile'
    },
    'errorFile': {
      'type': 'dateFile',
      'filename': filePath + '/error/',
      'absolute': true,
      'alwaysIncludePattern': true,
      'maxLogSize': 10485760,
      'pattern': 'yyyy-MM-dd.log'
    },
    'infoFile': {
      'type': 'dateFile',
      'filename': filePath + '/info/',
      'absolute': true,
      'alwaysIncludePattern': true,
      'maxLogSize': 10485760,
      'pattern': 'yyyy-MM-dd.log'
    },
    'warnFile': {
      'type': 'dateFile',
      'filename': filePath + '/warn/',
      'absolute': true,
      'alwaysIncludePattern': true,
      'maxLogSize': 10485760,
      'pattern': 'yyyy-MM-dd.log'
    },
    'debugFile': {
      'type': 'dateFile',
      'filename': filePath + '/debug/',
      'absolute': true,
      'alwaysIncludePattern': true,
      'maxLogSize': 10485760,
      'pattern': 'yyyy-MM-dd.log'
    }
  },
  'categories': {
    'default': {
      'appenders': [
        'infoFile'
      ],
      'level': 'DEBUG'
    },
    'info': {
      'appenders': [
        'infoFile'
      ],
      'level': 'info'
    },
    'error': {
      'appenders': [
        'errorFile'
      ],
      'level': 'error'
    },
    'warn': {
      'appenders': [
        'warnFile'
      ],
      'level': 'warn'
    },
    'debug': {
      'appenders': [
        'debugFile'
      ],
      'level': 'debug'
    },
    xcLogConsole: {
      appenders: ['xcLogConsole'],
      level: log4.levels.ALL
    }
  }
});
const con = log4.getLogger('xcLogConsole');
const info = log4.getLogger('info');
const warn = log4.getLogger('warn');
const error = log4.getLogger('error');
const debug = log4.getLogger('debug');

const logger = (name = 'localServer') => {
  name = name.toUpperCase();
  return {
    info: (...msg) => {
      info.info(`[${name}] => `, ...msg);
      con.info(`[${name}] => `, ...msg);
    },
    warn: (...msg) => {
      warn.warn(name + '->', ...msg);
      con.warn(`[${name}] => `, ...msg);
    },
    error: (...msg) => {
      error.error(name + '->', ...msg);
      con.warn(`[${name}] => `, ...msg);
    },
    debug: (...msg) => {
      debug.debug(name + '->', ...msg);
      con.debug(`[${name}] => `, ...msg);
    }
  };
};
module.exports = logger;
